package bean;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;

import bean.Proveedor;
import bean.vo.ProveedorVO;

@Entity 
@Table( name = "proveedores" )
public class Proveedor extends EntidadPersistente {
	
	private String cuit;
	private String razonSocial;
	private String telefono;
	@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH} )
	@Cascade( org.hibernate.annotations.CascadeType.SAVE_UPDATE)
	private Direccion direccion;
	
	public Proveedor() {}

	public Proveedor(String cuit) {
		this.cuit = cuit;
	}
	
	public Proveedor(ProveedorVO p, Direccion direccion) throws Exception {
		this(p.getCuit(), p.getRazonSocial(), p.getTelefono(), direccion);
	}
			
	public Proveedor(String cuit, String razonSocial, String telefono, Direccion direccion) throws Exception {
		
		if (cuit == null || cuit.equalsIgnoreCase("")) {
			throw new Exception("ERROR - Cuit es requerido.");
		}
		
		if (razonSocial == null || razonSocial.equalsIgnoreCase("")) {
			throw new Exception("ERROR - Razon Social es requerido.");
		}
		
		this.cuit = cuit;
		this.razonSocial = razonSocial;
		this.telefono = telefono;
		this.direccion = direccion;
	}
	
	public ProveedorVO getVO() {
		ProveedorVO vo = new ProveedorVO();
		vo.setCuit(cuit);
		vo.setDireccion(direccion != null ? direccion.getVO() : null);
		vo.setRazonSocial(razonSocial);
		vo.setTelefono(telefono);
		
		return vo;
	}
	
	public String getCuit() {
		return cuit;
	}
	
	public void setCuit(String cuit) {
		this.cuit = cuit;
	}
	
	public String getRazonSocial() {
		return razonSocial;
	}
	
	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}
	
	public Direccion getDireccion() {
		return direccion;
	}
	
	public void setDireccion(Direccion direccion) {
		this.direccion = direccion;
	}
	
	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	
	@Override
	public int hashCode() {
		final int primo = 31;
		int result = 1;
		result = primo * (result + (cuit == null ? 0 : cuit.hashCode()));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) return true;	
		if ((obj == null) || (!(obj instanceof Proveedor))) {
			return false;
		}
		Proveedor otro = (Proveedor) obj;
		return cuit!=null && otro.getCuit() != null ? (otro.getCuit().equals(cuit)) : false;
	}
}
